<script>
    let arr = [10, 'ab', 'xy', 'mn'];
    console.log(arr);
    // 数组有Symbol.iterator方法，该方法执行完毕后返回一个指针对象
        // 指针对象中有一个next方法
        // 调用next方法后，得到一个对象: {value: 当前值, done: false/true}
    let iter = arr[Symbol.iterator]();
    console.log(iter); // { next() }

    console.log( iter.next() ); // {value: 10, done: false}
    console.log( iter.next() );// {value: ab, done: false}
    console.log( iter.next() );// {value: xy, done: false}
    console.log( iter.next() );// {value: mn, done: false}
    console.log( iter.next() );// {value: undefined, done: true}

    // 2.为对象部署iterator接口
    let obj = {
        name: 'tom',
        age: 10,
        sex: '男'
    }
    // 对象添加Symbol.iterator方法
    // 有Symbol.iterator方法，该方法执行完毕后返回一个指针对象
        // 指针对象中有一个next方法
        // 调用next方法后，得到一个对象: {value: 当前值, done: false/true}
    obj[Symbol.iterator] = function(){
        let datas = Object.values(this);
        let index = 0;
        console.log(datas); // ['tom', 10, '男']
        return {
            next(){
                if(index >= datas.length){
                    return {
                        value: datas[index++],
                        done: true
                    }
                }else{
                    return {
                        value: datas[index++],
                        done: false
                    }
                }
            }
        }
    }
    let iter2 = obj[Symbol.iterator]();
    console.log( iter2.next() ); // {value: 'tom', done: false}
    console.log( iter2.next() ); // {value: 10, done: false}
    console.log( iter2.next() ); // {value: 男, done: false}
    console.log( iter2.next() ); // {value: undefined, done: false}

    // 部署完以后，可以使用for-of遍历
    for(let val of obj){
        console.log(val);
    }
</script>